<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>近实时搜索 | ElasticSearch 7.7 权威指南中文版</title>
	<meta name="keywords" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <meta name="description" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
	<script>
	var _link = 'near-real-time.html';
    </script>
</head>
<body>
<div class="main-container">
    <section id="content">
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.7/near-real-time.html" rel="nofollow" target="_blank">https://www.elastic.co/guide/en/elasticsearch/reference/7.7/near-real-time.html</a>, 原文档版权归 www.elastic.co 所有<br/>本地英文版地址: <a href="../en/near-real-time.html" rel="nofollow" target="_blank">../en/near-real-time.html</a></div>
                        <!-- start body -->
                  <div class="page_header">
<strong>重要</strong>: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html" rel="nofollow">当前版本文档</a>。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch 权威指南 [7.7]</a></span>
»
<span class="breadcrumb-node"><a href="search-your-data.html">搜索你的数据</a></span>
»
<span class="breadcrumb-node">近实时搜索</span>
</div>
<div class="navheader">
<span class="prev">
<a href="run-a-search.html">« 运行一个搜索</a>
</span>
<span class="next">
<a href="async-search-intro.html">运行耗时的搜索 »</a>
</span>
</div>
<div class="chapter">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="near-real-time"></a>近实时搜索 (Near real-time search)
</h2>
</div></div></div>
<p>
<a class="xref" href="documents-indices.html" title="数据输入: 文档和索引">文档和索引</a> 概述表明，当一个文档存储到 Elasticsearch 中时，它会被索引，并在 1 秒钟内几乎实时地完全可搜索。

是什么定义了近实时搜索？
</p>
<p>
Elasticsearch 所基于的 Java 库 Lucene 引入了按 段(segment) 搜索的概念。

一个 <em>segment(段)</em> 类似于一个倒排索引，但是单词 <em>index</em> 在Lucene 中的意思是“一个段的集合加上一个提交点”。

在提交之后，一个新的段被添加到提交点，并且清空缓冲区。
</p>
<p>
位于 Elasticsearch 和磁盘之间的是文件系统缓存。

内存索引缓冲区中的文档(<a class="xref" href="near-real-time.html#img-pre-refresh" title="A Lucene index with new documents in the in-memory buffer">图 1</a>)被写入一个新的段 (<a class="xref" href="near-real-time.html#img-post-refresh" title="The buffer contents are written to a segment, which is searchable, but is not yet committed">图 2</a>)。

新的段首先被写入文件系统缓存(代价很低)，然后才被 刷写(flush) 到磁盘(代价很高)。

但是，文件进入缓存后，就可以像其他文件一样打开和读取。
</p>
<div id="img-pre-refresh" class="imageblock">
<div class="content">
<img src="../static/images/lucene-in-memory-buffer.png" alt="A Lucene index with new documents in the in-memory buffer">
</div>
<div class="title">图1、内存缓冲区中包含新文档的 Lucene 索引</div>
</div>
<p>
Lucene 允许写入和打开新的段，使得它们包含的文档在搜索时可见，而无需执行一个完整的提交。

这是一个比提交到磁盘轻得多的过程，并且可以经常执行而不会降低性能。
</p>
<div id="img-post-refresh" class="imageblock">
<div class="content">
<img src="../static/images/lucene-written-not-committed.png" alt="The buffer contents are written to a segment, which is searchable, but is not yet committed">
</div>
<div class="title">图2、缓冲区内容被写入一个可搜索的段，但它尚未提交</div>
</div>
<p>
在 Elasticsearch 中，写入和打开一个新段的过程称为 <em>refresh</em>(刷新)。

refresh 使自上次刷新以来对索引执行的所有操作都可被搜索。

可以通过以下方式控制 refresh：
</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
等待刷新间隔
</li>
<li class="listitem">
设置 <a class="xref" href="docs-refresh.html" title="?refresh">?refresh</a> 选项
</li>
<li class="listitem">
使用 <a class="xref" href="indices-refresh.html" title="refresh API">refresh API</a> 来显式的完成一个 refresh (<code class="literal">POST _refresh</code>)
</li>
</ul>
</div>
<p>
默认情况下，Elasticsearch 每秒定期 refresh 索引，但只针对在过去 30 秒内收到一个或更多搜索请求的索引。

这就是为什么我们说 Elasticsearch 具有 <em>近</em> 实时的搜索：文档更改不会立即在搜索中可见，但会在这个时间段内变得可见。
</p>
</div>
<div class="navfooter">
<span class="prev">
<a href="run-a-search.html">« 运行一个搜索</a>
</span>
<span class="next">
<a href="async-search-intro.html">运行耗时的搜索 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>